package cn.source.system.service.impl;
import java.util.ArrayList;
import java.util.List;
import cn.source.common.utils.DateUtils;
import cn.source.system.utils.SnowflakeIdWorker;
import org.springframework.stereotype.Service;
import cn.source.system.mapper.BillMapper;
import cn.source.system.domain.Bill;
import cn.source.system.service.IBillService;
import javax.annotation.Resource;
/**
 * 预约管理Service业务层处理
 *
 * @author gygl
 * @date 2023-08-01
 */
@Service
public class BillServiceImpl implements IBillService
{
    @Resource
    private BillMapper billMapper;
    /**
     * 查询预约管理
     *
     * @param billId 预约管理主键
     * @return 预约管理
     */
    @Override
    public Bill selectBillByBillId(String billId)
    {
        return billMapper.selectBillByBillId(billId);
    }
    /**
     * 查询预约管理列表
     *
     * @param bill 预约管理
     * @return 预约管理
     */
    @Override
    public List<Bill> selectBillList(Bill bill)
    {
        return billMapper.selectBillList(bill);
    }
    /**
     * 新增预约管理
     *
     * @param bill 预约管理
     * @return 结果
     */
    @Override
    public int insertBill(Bill bill)
    {
        SnowflakeIdWorker snowflakeIdWorker = new SnowflakeIdWorker();
        bill.setAudit("0");
        bill.setBillTime(DateUtils.getNowDate());
        bill.setCreateTime(DateUtils.getNowDate());
        bill.setBillId(String.valueOf(snowflakeIdWorker.nextId()));
        return billMapper.insertBill(bill);
    }
    /**
     * 修改预约管理
     *
     * @param bill 预约管理
     * @return 结果
     */
    @Override
    public boolean updateBill(Bill bill)
    {
        bill.setUpdateTime(DateUtils.getNowDate());
        if(billMapper.updateBill(bill)){
            return true;
        }else{
            return false;
        }
    }
    /**
     * 批量删除预约管理
     *
     * @param billIds 需要删除的预约管理主键
     * @return 结果
     */
    @Override
    public int deleteBillByBillIds(String[] billIds)
    {
        return billMapper.deleteBillByBillIds(billIds);
    }
    /**
     * 删除预约管理信息
     *
     * @param billId 预约管理主键
     * @return 结果
     */
    @Override
    public boolean deleteBillByBillId(String billId)
    {
        if(billMapper.selectBillByBillId(billId).getBillStatus().equals("4")||billMapper.selectBillByBillId(billId).getBillStatus().equals("0")){
            billMapper.deleteBillByBillId(billId);
            return true;
        }else {
            return false;
        }
    }
    /**
     * 撤销预约
     * @param billId
     * @return
     */
    @Override
    public boolean quashBillByBillId(String billId){
        String status=billMapper.selectBillByBillId(billId).getBillStatus();
        System.out.println(status);
        if(status.equals("1")){
            billMapper.quashBillByBillId(billId);
            return true;
        }else {
            return false;
        }
    }
    /**
     * 退房
     * @param billId
     * @return
     */
    @Override
    public boolean checkBillByBillId(String billId){
        if(billMapper.selectBillByBillId(billId).getBillStatus().equals("2")){
            billMapper.checkBillByBillId(billId);
            return true;
        }else{
            return false;
        }
    }
    /**
     * 审核
     * @param billId
     * @param status
     * @return
     */
    @Override
    public boolean applyBillByBillId(String billId, String status){
        if(billMapper.selectBillByBillId(billId).getAudit().equals("1")&&status.equals("2")){
            billMapper.applyBillByBillId(billId,status);
            return true;
        }else if(billMapper.selectBillByBillId(billId).getAudit().equals("0") &&status.equals("1")){
            billMapper.applyBillByBillId(billId,status);
            return true;
        }else if(billMapper.selectBillByBillId(billId).getAudit().equals("0")&&status.equals("2")){
            billMapper.applyBillByBillId(billId,status);
            return true;
        }else {
            return false;
        }
    }
    /**
     * 查询入住的人数
     * @param bill
     * @return
     */
    @Override
    public Object selectCheckInRoomCount(Bill bill) {
        List< Bill > billList = billMapper.selectBillList(bill);
        int count=0;
        for (Bill item:billList
             ) {
            if (item.getBillStatus().equals("2")) {
                count++;
            }
        }
        return count;
    }
    @Override
    public Object selectCheckOutRoomCount(Bill bill) {
        List<Bill> billList = billMapper.selectBillList(bill);
        int count = 0;
        for (Bill item: billList) {
            if (item.getBillStatus().equals("1")){
                count++;
            }
            }
        return count;
    }
    @Override
    public boolean longApplyBill(Bill bill){
        SnowflakeIdWorker snowflakeIdWorker = new SnowflakeIdWorker();
        bill.setBillId(String.valueOf(snowflakeIdWorker.nextId()));
        bill.setAudit("1");
        if(billMapper.longApplyBill(bill)){
            return true;
        }else{
            return false;
        }
    }
    /**
     * 查询某教师所有订单信息
     * @param
     * @param userId
     * @return
     */
    @Override
    public List<Bill> selectUserBillList( String userId) {
        return billMapper. selectUserBillList(userId);
    }
}
